home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / GL / glx.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-07-16  |  14.9 KB  |  501 lines

  1. /*
  2.  * Mesa 3-D graphics library
  3.  * Version:  6.5
  4.  * 
  5.  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  6.  * 
  7.  * Permission is hereby granted, free of charge, to any person obtaining a
  8.  * copy of this software and associated documentation files (the "Software"),
  9.  * to deal in the Software without restriction, including without limitation
  10.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  11.  * and/or sell copies of the Software, and to permit persons to whom the
  12.  * Software is furnished to do so, subject to the following conditions:
  13.  * 
  14.  * The above copyright notice and this permission notice shall be included
  15.  * in all copies or substantial portions of the Software.
  16.  * 
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  20.  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
  21.  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  22.  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  23.  */
  24.  
  25.  
  26. #ifndef GLX_H
  27. #define GLX_H
  28.  
  29.  
  30. #ifdef __VMS
  31. #include <GL/vms_x_fix.h>
  32. # ifdef __cplusplus
  33. /* VMS Xlib.h gives problems with C++.
  34.  * this avoids a bunch of trivial warnings */
  35. #pragma message disable nosimpint
  36. #endif
  37. #endif
  38. #include <X11/Xlib.h>
  39. #include <X11/Xutil.h>
  40. #ifdef __VMS
  41. # ifdef __cplusplus
  42. #pragma message enable nosimpint
  43. #endif
  44. #endif
  45. #include <GL/gl.h>
  46.  
  47.  
  48. #if defined(USE_MGL_NAMESPACE)
  49. #include "glx_mangle.h"
  50. #endif
  51.  
  52.  
  53. #ifdef __cplusplus
  54. extern "C" {
  55. #endif
  56.  
  57.  
  58. #define GLX_VERSION_1_1        1
  59. #define GLX_VERSION_1_2        1
  60. #define GLX_VERSION_1_3        1
  61. #define GLX_VERSION_1_4        1
  62.  
  63. #define GLX_EXTENSION_NAME   "GLX"
  64.  
  65.  
  66.  
  67. /*
  68.  * Tokens for glXChooseVisual and glXGetConfig:
  69.  */
  70. #define GLX_USE_GL        1
  71. #define GLX_BUFFER_SIZE        2
  72. #define GLX_LEVEL        3
  73. #define GLX_RGBA        4
  74. #define GLX_DOUBLEBUFFER    5
  75. #define GLX_STEREO        6
  76. #define GLX_AUX_BUFFERS        7
  77. #define GLX_RED_SIZE        8
  78. #define GLX_GREEN_SIZE        9
  79. #define GLX_BLUE_SIZE        10
  80. #define GLX_ALPHA_SIZE        11
  81. #define GLX_DEPTH_SIZE        12
  82. #define GLX_STENCIL_SIZE    13
  83. #define GLX_ACCUM_RED_SIZE    14
  84. #define GLX_ACCUM_GREEN_SIZE    15
  85. #define GLX_ACCUM_BLUE_SIZE    16
  86. #define GLX_ACCUM_ALPHA_SIZE    17
  87.  
  88.  
  89. /*
  90.  * Error codes returned by glXGetConfig:
  91.  */
  92. #define GLX_BAD_SCREEN        1
  93. #define GLX_BAD_ATTRIBUTE    2
  94. #define GLX_NO_EXTENSION    3
  95. #define GLX_BAD_VISUAL        4
  96. #define GLX_BAD_CONTEXT        5
  97. #define GLX_BAD_VALUE           6
  98. #define GLX_BAD_ENUM        7
  99.  
  100.  
  101. /*
  102.  * GLX 1.1 and later:
  103.  */
  104. #define GLX_VENDOR        1
  105. #define GLX_VERSION        2
  106. #define GLX_EXTENSIONS         3
  107.  
  108.  
  109. /*
  110.  * GLX 1.3 and later:
  111.  */
  112. #define GLX_CONFIG_CAVEAT        0x20
  113. #define GLX_DONT_CARE            0xFFFFFFFF
  114. #define GLX_X_VISUAL_TYPE        0x22
  115. #define GLX_TRANSPARENT_TYPE        0x23
  116. #define GLX_TRANSPARENT_INDEX_VALUE    0x24
  117. #define GLX_TRANSPARENT_RED_VALUE    0x25
  118. #define GLX_TRANSPARENT_GREEN_VALUE    0x26
  119. #define GLX_TRANSPARENT_BLUE_VALUE    0x27
  120. #define GLX_TRANSPARENT_ALPHA_VALUE    0x28
  121. #define GLX_WINDOW_BIT            0x00000001
  122. #define GLX_PIXMAP_BIT            0x00000002
  123. #define GLX_PBUFFER_BIT            0x00000004
  124. #define GLX_AUX_BUFFERS_BIT        0x00000010
  125. #define GLX_FRONT_LEFT_BUFFER_BIT    0x00000001
  126. #define GLX_FRONT_RIGHT_BUFFER_BIT    0x00000002
  127. #define GLX_BACK_LEFT_BUFFER_BIT    0x00000004
  128. #define GLX_BACK_RIGHT_BUFFER_BIT    0x00000008
  129. #define GLX_DEPTH_BUFFER_BIT        0x00000020
  130. #define GLX_STENCIL_BUFFER_BIT        0x00000040
  131. #define GLX_ACCUM_BUFFER_BIT        0x00000080
  132. #define GLX_NONE            0x8000
  133. #define GLX_SLOW_CONFIG            0x8001
  134. #define GLX_TRUE_COLOR            0x8002
  135. #define GLX_DIRECT_COLOR        0x8003
  136. #define GLX_PSEUDO_COLOR        0x8004
  137. #define GLX_STATIC_COLOR        0x8005
  138. #define GLX_GRAY_SCALE            0x8006
  139. #define GLX_STATIC_GRAY            0x8007
  140. #define GLX_TRANSPARENT_RGB        0x8008
  141. #define GLX_TRANSPARENT_INDEX        0x8009
  142. #define GLX_VISUAL_ID            0x800B
  143. #define GLX_SCREEN            0x800C
  144. #define GLX_NON_CONFORMANT_CONFIG    0x800D
  145. #define GLX_DRAWABLE_TYPE        0x8010
  146. #define GLX_RENDER_TYPE            0x8011
  147. #define GLX_X_RENDERABLE        0x8012
  148. #define GLX_FBCONFIG_ID            0x8013
  149. #define GLX_RGBA_TYPE            0x8014
  150. #define GLX_COLOR_INDEX_TYPE        0x8015
  151. #define GLX_MAX_PBUFFER_WIDTH        0x8016
  152. #define GLX_MAX_PBUFFER_HEIGHT        0x8017
  153. #define GLX_MAX_PBUFFER_PIXELS        0x8018
  154. #define GLX_PRESERVED_CONTENTS        0x801B
  155. #define GLX_LARGEST_PBUFFER        0x801C
  156. #define GLX_WIDTH            0x801D
  157. #define GLX_HEIGHT            0x801E
  158. #define GLX_EVENT_MASK            0x801F
  159. #define GLX_DAMAGED            0x8020
  160. #define GLX_SAVED            0x8021
  161. #define GLX_WINDOW            0x8022
  162. #define GLX_PBUFFER            0x8023
  163. #define GLX_PBUFFER_HEIGHT              0x8040
  164. #define GLX_PBUFFER_WIDTH               0x8041
  165. #define GLX_RGBA_BIT            0x00000001
  166. #define GLX_COLOR_INDEX_BIT        0x00000002
  167. #define GLX_PBUFFER_CLOBBER_MASK    0x08000000
  168.  
  169.  
  170. /*
  171.  * GLX 1.4 and later:
  172.  */
  173. #define GLX_SAMPLE_BUFFERS              0x186a0 /*100000*/
  174. #define GLX_SAMPLES                     0x186a1 /*100001*/
  175.  
  176.  
  177.  
  178. typedef struct __GLXcontextRec *GLXContext;
  179. typedef XID GLXPixmap;
  180. typedef XID GLXDrawable;
  181. /* GLX 1.3 and later */
  182. typedef struct __GLXFBConfigRec *GLXFBConfig;
  183. typedef XID GLXFBConfigID;
  184. typedef XID GLXContextID;
  185. typedef XID GLXWindow;
  186. typedef XID GLXPbuffer;
  187.  
  188.  
  189.  
  190. extern XVisualInfo* glXChooseVisual( Display *dpy, int screen,
  191.                      int *attribList );
  192.  
  193. extern GLXContext glXCreateContext( Display *dpy, XVisualInfo *vis,
  194.                     GLXContext shareList, Bool direct );
  195.  
  196. extern void glXDestroyContext( Display *dpy, GLXContext ctx );
  197.  
  198. extern Bool glXMakeCurrent( Display *dpy, GLXDrawable drawable,
  199.                 GLXContext ctx);
  200.  
  201. extern void glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
  202.                 unsigned long mask );
  203.  
  204. extern void glXSwapBuffers( Display *dpy, GLXDrawable drawable );
  205.  
  206. extern GLXPixmap glXCreateGLXPixmap( Display *dpy, XVisualInfo *visual,
  207.                      Pixmap pixmap );
  208.  
  209. extern void glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap );
  210.  
  211. extern Bool glXQueryExtension( Display *dpy, int *errorb, int *event );
  212.  
  213. extern Bool glXQueryVersion( Display *dpy, int *maj, int *min );
  214.  
  215. extern Bool glXIsDirect( Display *dpy, GLXContext ctx );
  216.  
  217. extern int glXGetConfig( Display *dpy, XVisualInfo *visual,
  218.              int attrib, int *value );
  219.  
  220. extern GLXContext glXGetCurrentContext( void );
  221.  
  222. extern GLXDrawable glXGetCurrentDrawable( void );
  223.  
  224. extern void glXWaitGL( void );
  225.  
  226. extern void glXWaitX( void );
  227.  
  228. extern void glXUseXFont( Font font, int first, int count, int list );
  229.  
  230.  
  231.  
  232. /* GLX 1.1 and later */
  233. extern const char *glXQueryExtensionsString( Display *dpy, int screen );
  234.  
  235. extern const char *glXQueryServerString( Display *dpy, int screen, int name );
  236.  
  237. extern const char *glXGetClientString( Display *dpy, int name );
  238.  
  239.  
  240. /* GLX 1.2 and later */
  241. extern Display *glXGetCurrentDisplay( void );
  242.  
  243.  
  244. /* GLX 1.3 and later */
  245. extern GLXFBConfig *glXChooseFBConfig( Display *dpy, int screen,
  246.                                        const int *attribList, int *nitems );
  247.  
  248. extern int glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,
  249.                                  int attribute, int *value );
  250.  
  251. extern GLXFBConfig *glXGetFBConfigs( Display *dpy, int screen,
  252.                                      int *nelements );
  253.  
  254. extern XVisualInfo *glXGetVisualFromFBConfig( Display *dpy,
  255.                                               GLXFBConfig config );
  256.  
  257. extern GLXWindow glXCreateWindow( Display *dpy, GLXFBConfig config,
  258.                                   Window win, const int *attribList );
  259.  
  260. extern void glXDestroyWindow( Display *dpy, GLXWindow window );
  261.  
  262. extern GLXPixmap glXCreatePixmap( Display *dpy, GLXFBConfig config,
  263.                                   Pixmap pixmap, const int *attribList );
  264.  
  265. extern void glXDestroyPixmap( Display *dpy, GLXPixmap pixmap );
  266.  
  267. extern GLXPbuffer glXCreatePbuffer( Display *dpy, GLXFBConfig config,
  268.                                     const int *attribList );
  269.  
  270. extern void glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf );
  271.  
  272. extern void glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
  273.                               unsigned int *value );
  274.  
  275. extern GLXContext glXCreateNewContext( Display *dpy, GLXFBConfig config,
  276.                                        int renderType, GLXContext shareList,
  277.                                        Bool direct );
  278.  
  279. extern Bool glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
  280.                                    GLXDrawable read, GLXContext ctx );
  281.  
  282. extern GLXDrawable glXGetCurrentReadDrawable( void );
  283.  
  284. extern int glXQueryContext( Display *dpy, GLXContext ctx, int attribute,
  285.                             int *value );
  286.  
  287. extern void glXSelectEvent( Display *dpy, GLXDrawable drawable,
  288.                             unsigned long mask );
  289.  
  290. extern void glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,
  291.                                  unsigned long *mask );
  292.  
  293.  
  294. /* GLX 1.4 and later */
  295. extern void (*glXGetProcAddress(const GLubyte *procname))( void );
  296.  
  297.  
  298. #ifndef GLX_GLXEXT_LEGACY
  299.  
  300. #include <GL/glxext.h>
  301.  
  302. #else
  303.  
  304.  
  305.  
  306. /*
  307.  * ARB 2. GLX_ARB_get_proc_address
  308.  */
  309. #ifndef GLX_ARB_get_proc_address
  310. #define GLX_ARB_get_proc_address 1
  311.  
  312. typedef void (*__GLXextFuncPtr)(void);
  313. extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *);
  314.  
  315. #endif /* GLX_ARB_get_proc_address */
  316.  
  317.  
  318.  
  319. #endif /* GLX_GLXEXT_LEGACY */
  320.  
  321.  
  322. /**
  323.  ** The following aren't in glxext.h yet.
  324.  **/
  325.  
  326.  
  327. /*
  328.  * ???. GLX_NV_vertex_array_range
  329.  */
  330. #ifndef GLX_NV_vertex_array_range
  331. #define GLX_NV_vertex_array_range
  332.  
  333. extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
  334. extern void glXFreeMemoryNV(GLvoid *pointer);
  335. typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
  336. typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer);
  337.  
  338. #endif /* GLX_NV_vertex_array_range */
  339.  
  340.  
  341. /*
  342.  * ???. GLX_MESA_allocate_memory
  343.  */ 
  344. #ifndef GLX_MESA_allocate_memory
  345. #define GLX_MESA_allocate_memory 1
  346.  
  347. extern void *glXAllocateMemoryMESA(Display *dpy, int scrn, size_t size, float readfreq, float writefreq, float priority);
  348. extern void glXFreeMemoryMESA(Display *dpy, int scrn, void *pointer);
  349. extern GLuint glXGetMemoryOffsetMESA(Display *dpy, int scrn, const void *pointer);
  350. typedef void * ( * PFNGLXALLOCATEMEMORYMESAPROC) (Display *dpy, int scrn, size_t size, float readfreq, float writefreq, float priority);
  351. typedef void ( * PFNGLXFREEMEMORYMESAPROC) (Display *dpy, int scrn, void *pointer);
  352. typedef GLuint (* PFNGLXGETMEMORYOFFSETMESAPROC) (Display *dpy, int scrn, const void *pointer);
  353.  
  354. #endif /* GLX_MESA_allocate_memory */
  355.  
  356.  
  357. /*
  358.  * ARB ?. GLX_ARB_render_texture
  359.  * XXX This was never finalized!
  360.  */
  361. #ifndef GLX_ARB_render_texture
  362. #define GLX_ARB_render_texture 1
  363.  
  364. extern Bool glXBindTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
  365. extern Bool glXReleaseTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
  366. extern Bool glXDrawableAttribARB(Display *dpy, GLXDrawable draw, const int *attribList);
  367.  
  368. #endif /* GLX_ARB_render_texture */
  369.  
  370.  
  371. /*
  372.  * Remove this when glxext.h is updated.
  373.  */
  374. #ifndef GLX_NV_float_buffer
  375. #define GLX_NV_float_buffer 1
  376.  
  377. #define GLX_FLOAT_COMPONENTS_NV         0x20B0
  378.  
  379. #endif /* GLX_NV_float_buffer */
  380.  
  381.  
  382.  
  383. /*
  384.  * #?. GLX_MESA_swap_frame_usage
  385.  */
  386. #ifndef GLX_MESA_swap_frame_usage
  387. #define GLX_MESA_swap_frame_usage 1
  388.  
  389. extern int glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable, float *usage);
  390. extern int glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
  391. extern int glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
  392. extern int glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);
  393.  
  394. typedef int (*PFNGLXGETFRAMEUSAGEMESAPROC) (Display *dpy, GLXDrawable drawable, float *usage);
  395. typedef int (*PFNGLXBEGINFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
  396. typedef int (*PFNGLXENDFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
  397. typedef int (*PFNGLXQUERYFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);
  398.  
  399. #endif /* GLX_MESA_swap_frame_usage */
  400.  
  401.  
  402.  
  403. /*
  404.  * #?. GLX_MESA_swap_control
  405.  */
  406. #ifndef GLX_MESA_swap_control
  407. #define GLX_MESA_swap_control 1
  408.  
  409. extern int glXSwapIntervalMESA(unsigned int interval);
  410. extern int glXGetSwapIntervalMESA(void);
  411.  
  412. typedef int (*PFNGLXSWAPINTERVALMESAPROC)(unsigned int interval);
  413. typedef int (*PFNGLXGETSWAPINTERVALMESAPROC)(void);
  414.  
  415. #endif /* GLX_MESA_swap_control */
  416.  
  417.  
  418.  
  419. /*
  420.  * #?. GLX_EXT_texture_from_pixmap
  421.  * XXX not finished?
  422.  */
  423. #ifndef GLX_EXT_texture_from_pixmap
  424. #define GLX_EXT_texture_from_pixmap 1
  425.  
  426. #define GLX_BIND_TO_TEXTURE_RGB_EXT        0x20D0
  427. #define GLX_BIND_TO_TEXTURE_RGBA_EXT       0x20D1
  428. #define GLX_BIND_TO_MIPMAP_TEXTURE_EXT     0x20D2
  429. #define GLX_BIND_TO_TEXTURE_TARGETS_EXT    0x20D3
  430. #define GLX_Y_INVERTED_EXT                 0x20D4
  431.  
  432. #define GLX_TEXTURE_FORMAT_EXT             0x20D5
  433. #define GLX_TEXTURE_TARGET_EXT             0x20D6
  434. #define GLX_MIPMAP_TEXTURE_EXT             0x20D7
  435.  
  436. #define GLX_TEXTURE_FORMAT_NONE_EXT        0x20D8
  437. #define GLX_TEXTURE_FORMAT_RGB_EXT         0x20D9
  438. #define GLX_TEXTURE_FORMAT_RGBA_EXT        0x20DA
  439.  
  440. #define GLX_TEXTURE_1D_BIT_EXT             0x00000001
  441. #define GLX_TEXTURE_2D_BIT_EXT             0x00000002
  442. #define GLX_TEXTURE_RECTANGLE_BIT_EXT      0x00000004
  443.  
  444. #define GLX_TEXTURE_1D_EXT                 0x20DB
  445. #define GLX_TEXTURE_2D_EXT                 0x20DC
  446. #define GLX_TEXTURE_RECTANGLE_EXT          0x20DD
  447.  
  448. #define GLX_FRONT_LEFT_EXT                 0x20DE
  449. #define GLX_FRONT_RIGHT_EXT                0x20DF
  450. #define GLX_BACK_LEFT_EXT                  0x20E0
  451. #define GLX_BACK_RIGHT_EXT                 0x20E1
  452. #define GLX_FRONT_EXT                      GLX_FRONT_LEFT_EXT
  453. #define GLX_BACK_EXT                       GLX_BACK_LEFT_EXT
  454. #define GLX_AUX0_EXT                       0x20E2
  455. #define GLX_AUX1_EXT                       0x20E3 
  456. #define GLX_AUX2_EXT                       0x20E4 
  457. #define GLX_AUX3_EXT                       0x20E5 
  458. #define GLX_AUX4_EXT                       0x20E6 
  459. #define GLX_AUX5_EXT                       0x20E7 
  460. #define GLX_AUX6_EXT                       0x20E8
  461. #define GLX_AUX7_EXT                       0x20E9 
  462. #define GLX_AUX8_EXT                       0x20EA 
  463. #define GLX_AUX9_EXT                       0x20EB
  464.  
  465. extern void glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
  466. extern void glXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer);
  467.  
  468. #endif /* GLX_EXT_texture_from_pixmap */
  469.  
  470.  
  471.  
  472.  
  473. /*** Should these go here, or in another header? */
  474. /*
  475. ** GLX Events
  476. */
  477. typedef struct {
  478.     int event_type;        /* GLX_DAMAGED or GLX_SAVED */
  479.     int draw_type;        /* GLX_WINDOW or GLX_PBUFFER */
  480.     unsigned long serial;    /* # of last request processed by server */
  481.     Bool send_event;        /* true if this came for SendEvent request */
  482.     Display *display;        /* display the event was read from */
  483.     GLXDrawable drawable;    /* XID of Drawable */
  484.     unsigned int buffer_mask;    /* mask indicating which buffers are affected */
  485.     unsigned int aux_buffer;    /* which aux buffer was affected */
  486.     int x, y;
  487.     int width, height;
  488.     int count;            /* if nonzero, at least this many more */
  489. } GLXPbufferClobberEvent;
  490.  
  491. typedef union __GLXEvent {
  492.     GLXPbufferClobberEvent glxpbufferclobber;
  493.     long pad[24];
  494. } GLXEvent;
  495.  
  496. #ifdef __cplusplus
  497. }
  498. #endif
  499.  
  500. #endif
  501.